<?php

/**
 * Created by JetBrains PhpStorm.
 * User: Sander
 * Date: 22-6-11
 * Time: 9:06
 * To change this template use File | Settings | File Templates.
 */
require_once(Config::acquire('Model', null, 'model'));
require_once(Config::acquire('Leverancier', MODEL));
require_once(Config::acquire('Locatie', MODEL));
class Hardware extends Model {

    /**
     * initialiseren variabelen
     */
    private $id;
    private $naam;
    private $omschrijving;
    private $locatie;
    private $serienummer;
    private $merk;
    private $type;
    private $leverancier;
    private $aanschafjaar;

    /**
     * aanmaken van de vriabelen
     */
    public function __construct($id, $naam, $omschrijving, Locatie $locatie, $serienummer, $merk, $type, Leverancier $leverancier, $aanschafjaar) {
        $this->id = $id;
        $this->naam = $naam;
        $this->omschrijving = $omschrijving;
        $this->locatie = $locatie;
        $this->serienummer = $serienummer;
        $this->merk = $merk;
        $this->type = $type;
        $this->leverancier = $leverancier;
        $this->aanschafjaar = $aanschafjaar;
    }

     /**
     * Query voor het updaten van de betreffende tabel
     */
    public function update() {
        if (!is_null($this->id)) {
            SQL::execute("UPDATE `hardware`
                SET `hardware_Naam` = '{$this->naam}',
                `hardware_Omschrijving` = '{$this->omschrijving}',
                `Locatie_ID` = '{$this->locatie->getID()}',
                `hardware_SerieNummer` = '{$this->serienummer}',
                `hardware_Merk` = '{$this->merk}',
                `hardware_Type` = '{$this->type}',
                `Leverancier_ID` = '{$this->leverancier->getID()}',
                `hardware_Aanschaf_Jaar` = '{$this->aanschafjaar}'
            WHERE `hardware_ID` = {$this->id}");
        } else {
            SQL::execute("INSERT INTO `hardware` (
                            `hardware_ID`, `hardware_Naam`, `hardware_Omschrijving`, `Locatie_ID`, `hardware_SerieNummer`, `hardware_Merk`,
                            `hardware_Type`, `Leverancier_ID`, `hardware_Aanschaf_Jaar`)
            VALUES (NULL,
                    '{$this->naam}',
                    '{$this->omschrijving}',
                    '{$this->locatie->getID()}',
                    '{$this->serienummer}',
                    '{$this->merk}',
                    '{$this->type}',
                    '{$this->leverancier->getID()}',
                    '{$this->aanschafjaar}')");
        }
    }

    /**
     * gegevens naar een array schrijven.
     */
    public function toArray() {
        return array(
            "ID" => $this->id,
            "Naam" => $this->naam,
            "Omschrijving" => $this->omschrijving,
            "Locatie_ID" => $this->locatie->getID(),
            "Locatie_Naam" => $this->locatie->getNaam(),
            "SerieNummer" => $this->serienummer,
            "Merk" => $this->merk,
            "Type" => $this->type,
            "Leverancier_ID" => $this->leverancier->getID(),
            "Leverancier_Naam" => $this->leverancier->getNaam(),
            "Aanschaf_Jaar" => $this->aanschafjaar
        );
    }

    /*
     * lezen van de gegvens van 1 enkel item
     */
    public static function read($id) {
        $hardware = SQL::query("SELECT * FROM `hardware` WHERE `hardware_ID` = $id");
        if ($hardware->isValid()) {
            return new Hardware(
                $hardware->fetchField('hardware_ID'),
                $hardware->fetchField('hardware_Naam'),
                $hardware->fetchField('hardware_Omschrijving'),
                Locatie::read($hardware->fetchField('Locatie_ID')),
                $hardware->fetchField('hardware_SerieNummer'),
                $hardware->fetchField('hardware_Merk'),
                $hardware->fetchField('hardware_Type'),
                Leverancier::read($hardware->fetchField('Leverancier_ID')),
                $hardware->fetchField('hardware_Aanschaf_Jaar')
            );
        }
        return null;
    }

    /*
     * lezen van de gegvens van 1 enkel item
     */
    public static function readAll() {
        $hardware = SQL::query("SELECT * FROM `hardware`");
        $list = array();
        while ($hardware->isValid()) {
            $list[] = Hardware::create(
                $hardware->fetchField('hardware_ID'),
                $hardware->fetchField('hardware_Naam'),
                $hardware->fetchField('hardware_Omschrijving'),
                Locatie::read($hardware->fetchField('Locatie_ID')),
                $hardware->fetchField('hardware_SerieNummer'),
                $hardware->fetchField('hardware_Merk'),
                $hardware->fetchField('hardware_Type'),
                Leverancier::read($hardware->fetchField('Leverancier_ID')),
                $hardware->fetchField('hardware_Aanschaf_Jaar')
            );
            $hardware->next();
        }
        return $list;
    }

    /**
     * Query voor deleten van de gegevens uit de gegeven tabel
     */
    public function delete() {
        SQL::execute("DELETE FROM `hardware` WHERE `hardware_ID` = {$this->id}");
    }

    /**
     * Query voor deleten van  de gegevens uit de gegeven tabel
     */
    public function deleteSoft($Sid, $Hid) {

        SQL::execute("DELETE FROM `geinstaleerde_software` WHERE `software_ID` = $Sid AND `hardware_ID` = $Hid");
    }

    /**
     * aanmaken van een nieuw item
     */
    public static function create($id, $naam, $omschrijving, Locatie $locatie, $serienummer, $merk, $type, Leverancier $leverancier, $aanschafjaar) {
        return new Hardware($id, $naam, $omschrijving, $locatie, $serienummer, $merk, $type, $leverancier, $aanschafjaar);
    }

     /**
     * Setters & getters
     */
    public function setAanschafjaar($aanschafjaar)
    {
        $this->aanschafjaar = $aanschafjaar;
    }

    public function getAanschafjaar()
    {
        return $this->aanschafjaar;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setLeverancier($leverancier)
    {
        $this->leverancier = $leverancier;
    }

    public function getLeverancier()
    {
        return $this->leverancier;
    }

    public function setLocatie($locatie)
    {
        $this->locatie = $locatie;
    }

    public function getLocatie()
    {
        return $this->locatie;
    }


    public function setMerk($merk)
    {
        $this->merk = $merk;
    }

    public function getMerk()
    {
        return $this->merk;
    }

    public function setOmschrijving($omschrijving)
    {
        $this->omschrijving = $omschrijving;
    }

    public function getOmschrijving()
    {
        return $this->omschrijving;
    }

    public function setNaam($naam)
    {
        $this->naam = $naam;
    }

    public function getNaam()
    {
        return $this->naam;
    }

    public function setSerienummer($serienummer)
    {
        $this->serienummer = $serienummer;
    }

    public function getSerienummer()
    {
        return $this->serienummer;
    }

    public function setType($type)
    {
        $this->type = $type;
    }

    public function getType()
    {
        return $this->type;
    }
}